package com.reactor.part01;

/**
 * @author reactor
 * @date 2021/10/25 下午9:18
 * @description： 展现可见性，一个线程对共享变量的修改，另一个线程立马能看到
 * 多核cpu情况下，会导致变量不具备可见性，原因就是cpu中也各自缓存了count的值，两个线程都基于各自cpu中缓存的值做计算，导致最终count的值都小于20000
 * 硬件工程师给软件工程师挖的坑
 **/
public class Test {
    private long count =0;
    private void add10k(){
        int idx = 0;
        while (idx++ < 10000){
            count += 1;
        }
    }

    public static void main(String[] args) throws InterruptedException {
        final Test test = new Test();
        Thread th1 = new Thread(()->{
            test.add10k();
        });

        Thread th2 = new Thread(() -> {
            test.add10k();
        });
        th1.start();
        th2.start();

        // 等待两个线程执行完毕
        th1.join();
        th2.join();
        System.out.println(test.count);
    }

}
